import requests
from config import url, headers_web


class LabReport:

    def __init__(self):
        self.url = url
        self.headers = headers_web

    @classmethod
    def post_student_submit_report(cls, url: str, headers, params, json):
        """
        @Summary:接口-学生提交、重复提交、补交、打回提交实验报告
        @Description:小程序、web学生端-学生提交实验报告
        :param url:
        :param headers:
        :param params:{
                        "labReportId":"", # 报告id
                        "validCode":"" # labReportId=xxx&signKey=123123(md5加密)
                        }
        :param json:{
                        "answerContent":"",
                        "labReportAnswerFileResourceList":[{
                                "fileDisplayName":"", # 文件显示名称
                                "filePath":"", # 文件路径
                                "fileRealName":"",# 文件存储名称
                                "fileSize":"", # 文件大小
                                "fileType":"", # 文件类型
                                "innerUrl":"", # 内网地址
                                "outerUrl":"" # 外网地址
                    }],
                        "studentId":"", # 提交学生Id
                        "studentName":"", # 提交学生姓名
                        "studentNo":"", # 提交学生学号
                        "submitSource":"" # 提交来源  0：web端；1：小程序
                        }
        :return:
        """
        url = url + "/teachingApi/api/v1/labreport/student"

        r = requests.post(url=url, headers=headers, params=params, json=json)

        return r

    @classmethod
    def get_excellent_report_user_info(cls, url: str, headers, params):
        """
        @Summary:接口-获取优秀实验报告人员信息
        @Description:web学生端-已完成实验报告详情
        :param url:
        :param headers:
        :param params:{
                        "labReportId":"", # 报告id
                        "validCode":"" # labReportId=xxx&signKey=123123(md5加密)
                        }
        :return:
        """
        url = url + "/teachingApi/api/v1/labreport/student/labreportrecommenduser"
        r = requests.get(url=url,headers=headers,params=params)
        return r

    @classmethod
    def get_lab_report_list_student(cls, url: str, headers, params):
        """
        @Summary:接口-学生端获取实验报告列表信息
        @Description:1、小程序学生端-实验报告列表查询;2、web学生端-实验报告列表查询
        :param url:
        :param headers:
        :param params:{
                        "groupIds":"", # 班级（组）ids；多个班级','拼接
                        "requestPermission":"", # 调用方：1.学生web端；2.学生小程序端
                        "studentId":"", # 学生id
                        "validCode":"" # 验证码：studentId=xxx&signKey=123123(md5加密)
                        }
        :return:object:[{
                        "endTime":"", # 报告结束时间（格式：yyyy-MM-dd HH:mm）
                        "finalScore":"", # 最终得分
                        "labReportAnswerRepulseStatusIndex":"", # 报告提交是否打回状态(0:未打回;1:已打回)
                        "labReportAnswerRepulseStatusName":"", # 报告提交是否打回状态名称
                        "labReportAnswerStatusIndex":"", # 报告提交状态(0:未提交;1:已提交;2:补交)
                        "labReportAnswerStatusName":"", # 报告提交状态名称
                        "labReportId":"", # 报告id
                        "labReportStatusIndex":"", # 报告流程状态(0:未开始;1:进行中;2:批改中;3:已完成;4:已删除)
                        "labReportStatusName":"", # 报告流程状态名称
                        "projectName":"", # 项目名称
                        "startTime":"" # 报告开始时间（格式：yyyy-MM-dd HH:mm）
                        }]
        """
        url = url + "/teachingApi/api/v1/labreport/studentlabreport"
        r = requests.get(url=url,headers=headers,params=params)
        return r

    @classmethod
    def get_lab_report_detail_student(cls, url: str, headers, params):
        """
        @Summary:接口-学生获取提交实验报告详情信息
        @Description:小程序学生端-获取提交实验报告详情信息
        :param url:
        :param headers:
        :param params:{
                        "labReportId":"", # 报告id
                        "studentId":"", # 学生id
                        "validCode":"" # 验证码：labReportId=xxx&signKey=123123(md5加密)
                        }
        :return:
        """
        url = url + "/teachingApi/api/v1/labreport/studentlabreportdetails"
        r = requests.get(url=url,headers=headers,params=params)
        return r

    @classmethod
    def post_add_lab_report_teacher(cls, url: str, headers, params, json):
        """
        @Summary:接口-老师新增实验报告
        @Description:云课堂老师端-新增实验报告
        :param url:
        :param headers:
        :param params:validCode:验证码：&signKey=123123(md5加密)
        :param json:{
                        "collegeCode":"", # 课程学院编号
                        "collegeId":"", # 课程学院id
                        "collegeName":"", # 课程学院名称
                        "courseCode":"", # 课程编码
                        "courseId":"", # 课程id
                        "courseName":"", # 课程名称
                        "creatorId":"", # 创建人id
                        "creatorName":"", # 创建人姓名
                        "creatorNo":"", # 创建人编号
                        "endTime":"", # 结束时间 yyyy-MM-dd hh:mm:ss
                        "groupId":"", # 组id
                        "groupName":"", # 组名称
                        "groupNo":"", # 组编号
                        "projectId":"", # 项目id(如项目id为空则为新建项目)
                        "projectName":"", # 项目名称
                        "remark":"", # 备注
                        "schoolYear":"", # 学年
                        "startTime":"", # 开始时间 yyyy-MM-dd hh:mm:ss
                        "term":"", # 学期
                        "termId":"" # 学年学期id
                        }
        :return:
        """
        url = url + "/teachingApi/v1/labreport"
        r = requests.post(url=url,headers=headers,params=params,json=json)
        return r

    @classmethod
    def post_correct_lab_report_teacher(cls, url: str, headers, params, json):
        """
        @Summary:接口-老师批量批改学生提交报告
        @Description:云课堂老师端-批量批改实验报告
        :param url:
        :param headers:
        :param params:validCode:验证码：&signKey=123123(md5加密)
        :param json:{
                        "comment":"", # 评语
                        "labReportanswerIdList":[[ # 实验报告提交id集合
                            "labReportAnswerId":"" # 实验报告提交id
                            }],
                        "score":"", # 得分
                        "teacherId":"", # 批改老师id
                        "teacherName":"", # 批改老师姓名
                        "teacherNo":"" # 批改老师工号
                        }
        :return:
        """
        url = url + "/teachingApi/v1/labreport/labreportanswerscorrection"
        r = requests.post(url=url, headers=headers, params=params, json=json)
        return r

    @classmethod
    def post_recommend_excellent_lab_report_or_no(cls, url: str, headers, params, json):
        """
        @Summary:接口-学生实验报告推荐/取消推荐优秀实验报告
        @Description:云课堂老师端-实验报告推荐/取消推荐使用
        :param url:
        :param headers:
        :param params:{
                        "answerId":"", # 学生回答信息id
                        "labReportId":"", # 实验报告id
                        "recommend":"", # 是否推荐（true-推荐，false-取消推荐）
                        "teacherId":"", # 操作老师Id
                        "teacherName":"", # 操作老师姓名
                        "validCode":"", # 验证码：answerId={answerId}&signKey=123123(md5加密)
                        }
        :param json:
        :return:
        """
        url = url + "/teachingApi/v1/labreport/studentanswers/recommend"
        r = requests.post(url=url, headers=headers, params=params, json=json)
        return r

    @classmethod
    def post_repulse_lab_report(cls, url: str, headers, params, json):
        """
        @Summary:接口-学生实验报告推荐/取消推荐优秀实验报告
        @Description:云课堂老师端-实验报告推荐/取消推荐使用
        :param url:
        :param headers:
        :param params:{
                        "answerId":"", # 学生回答信息id
                        "labReportId":"", # 实验报告id
                        "recommend":"", # 是否推荐（true-推荐，false-取消推荐）
                        "teacherId":"", # 操作老师Id
                        "teacherName":"", # 操作老师姓名
                        "validCode":"", # 验证码：answerId={answerId}&signKey=123123(md5加密)
                        }
        :param json:
        :return:
        """
        url = url + "/teachingApi/v1/labreport/studentanswers/repulse"
        r = requests.post(url=url, headers=headers, params=params, json=json)
        return r

    @classmethod
    def get_lab_report_list_teacher(cls, url: str, headers, params):
        """
        @Summary:接口-老师获取实验报告列表信息
        @Description:1、云课堂老师端-获取实验报告列表；2、小程序老师端-获取实验报告列表
        :param url:
        :param headers:
        :param params:{
                        "groupIds":"", # 班级（组）ids；多个班级','拼接
                        "validCode":"" # 验证码：&signKey=123123(md5加密)
                        }
        :return:object:[{
                        "averageScore":"", # 平均分
                        "endDate":"", # 结束日期
                        "endTime":"", # 结束时间
                        "groupId":"", # 组id
                        "groupName":"", # 组名称
                        "labReportId":"", # 报告id
                        "labReportStatusIndex":"", # 报告流程状态(0:未开始;1:进行中;2:批改中;3:已完成;4:已删除)
                        "labReportStatusName":"", # 报告流程状态名称
                        "projectName":"", # 项目名称
                        "startDate":"", # 开始日期
                        "startTime":"" # 开始时间
                        }]
        """
        url = url + "/teachingApi/v1/labreport/teacherlabreport"
        r = requests.get(url=url, headers=headers, params=params)
        return r

    @classmethod
    def get_lab_report_detail_teacher(cls, url: str, headers, params, paramspath):
        """
        @Summary:接口-老师获取实验报告详情
        @Description:1.云课堂老师端-获取实验报告详情、2.小程序老师端-获取实验报告详情
        :param url:
        :param headers:
        :param params:validCode:验证码：id={}&signKey=123123(md5加密)
        :param paramspath:id:实验报告id
        :return:object:[{
                        "averageScore":"", # 平均分
                        "endTime":"", # 结束时间
                        "labReportId":"", # 报告id
                        "labReportStatusIndex":"", # 报告流程状态(0:未开始;1:进行中;2:批改中;3:已完成;4:已删除)
                        "labReportStatusName":"", # 报告流程状态名称
                        "projectName":"", # 项目名称
                        "remark":"", # 备注
                        "startTime":"", # 开始时间
                        "studentCompleteStatistics":[{
                            "allStudentNum":"", # 全部学生人数
                            "completeRate":"", # 完成率 百分比 直接取整
                            "completeStudentNum":"", # 已完成学生人数
                            "uncompleteStudentNum":"" # 未完成学生人数
                            }],
                        "studentScoreStatisticsList":[{
                            "sectionMaxScore":"", # sectionStudentNum
                            "sectionMinScore":"", # 区间分数最小值
                            "sectionStudentNum":"" # 区间学生人数
                            }]
                        }]
        """
        url = url + f"/teachingApi/v1/labreport/{paramspath}"
        r = requests.get(url=url, headers=headers, params=params)
        return r

    @classmethod
    def post_update_lab_report_status(cls, url: str, headers, params, json,paramspath):
        """
        @Summary:接口-更改实验报告状态（立即开始、立即结束、设置为已完成、删除）
        @Description:云课堂老师端-修改实验报告状态使用
        :param url:
        :param headers:
        :param params:{
                        "operation":"", # 操作（0-立即开始，1-立即结束，2-设置为已完成，3-删除）
                        "teacherId":"", # 操作老师Id
                        "teacherName":"", # 操作老师姓名
                        "teacherNo":"", # 操作老师工号
                        "validCode":"" # 验证码：id={id}&signKey=123123(md5加密)
                        }
        :param json:none
        :param paramspath:id:实验报告id
        :return:
        """
        url = url + f"/teachingApi/v1/labreport/{paramspath}/status"
        r = requests.get(url=url, headers=headers, params=params,json=json)
        return r

    @classmethod
    def get_lab_report_student_detail(cls, url: str, headers, params,paramspath):
        """
                @Summary:接口-老师获取实验报告学生明细
                @Description:1.云课堂老师端-获取实验报告学生明细、2.小程序老师端-获取未提交实验报告学生明细
                :param url:
                :param headers:
                :param params:{
                                "avatarEnable":"", # 是否显示头像
                                "completeStatus":"", # 学生提交状态 0：未完成；1：已完成;不传查全部
                                "excellentStatus":"", # 优秀报告状态（1-优秀,其他-全部）
                                "studentNameOrNo":"", # 根据学生姓名或者学号模糊查询
                                "validCode":"" # 验证码：id={id}&signKey=123123(md5加密)
                                }
                :param json:none
                :param paramspath:id:实验报告id
                :return:json:{
                                "allCount":"", # 总人数
                                "completeCount":"", # 完成人数
                                "correctedCount":"", # 已批改人数
                                "id":"", # 实验报告id
                                "noCompleteCount":"", # 未完成人数
                                "studentAnswerList":[{ # 实验报告信息列表
                                                        "answerId":"", # 实验报告答题信息id
                                                        "answerStatus":"", # 实验报告回答状态（0-未提交，1-已提交，2-补交）
                                                        "avatarInnerUrl":"", # 头像内网地址
                                                        "avatarOuterUrl":"", # 头像外网地址
                                                        "avatarPath":"", # 头像地址
                                                        "corrected":"", # 是否已经批改（true-已批改，false-未批改）
                                                        "finalRecommend":"", # 最终是否推荐（true-推荐（优秀），false-未推荐）
                                                        "finalScore":"", # 最终分数
                                                        "repulseStatus":"", # 作业打回状态（0-未打回，1-已打回）
                                                        "repulseTimes":"", # 打回次数
                                                        "studentId":"", # 学生id
                                                        "studentName":"", # 学生姓名
                                                        "studentNo":"", # 学生学号
                                                        "submitStatus":"", # 实验报告提交状态（0-未提交；1：已提交（包括正常提交和补交））
                                                        "submitTime":"" # 提交时间（如未提交默认当前时间方便排序）
                                                    }]
                                }
                """
        url = url + f"/teachingApi/v1/labreport/{paramspath}/students"
        r = requests.get(url=url, headers=headers, params=params)
        return r

    @classmethod
    def post_update_lab_report_info(cls, url: str, headers, params, json,paramspath):
        """
        @Summary:接口-老师修改实验报告基本信息
        @Description:1云课堂老师端-修改实验报告基本信息
        :param url:
        :param headers:
        :param params:validCode:验证码：id={id}&signKey=123123(md5加密)
        :param json:{
                    "startTime":"", # 结束时间 yyyy-MM-dd hh:mm:ss
                    "endTime":"", # 操作人id
                    "operatorId":"", # 操作人姓名
                    "operatorName":"", # 操作人编号
                    "operatorNo":"", # 备注
                    "remark":"" # 开始时间 yyyy-MM-dd hh:mm:ss
                    }
        :param paramspath:id:实验报告id
        :return:
        """
        url = url + f"/teachingApi/v1/labreport/{paramspath}/students"
        r = requests.get(url=url, headers=headers, params=params,json=json)
        return r

    @classmethod
    def get_correct_info_teacher(cls, url: str, headers, params,paramspath):
        """
        @Summary:接口-老师获取批改页面数据
        @Description:1.云课堂老师端-单个批改实验报告、查看详情
        :param url:
        :param headers:
        :param params:validCode:验证码：labReportAnswerId=XXX&signKey=123123(md5加密)
        :param paramspath:labReportAnswerId:报告提交Id
        :return:object:{
                        "answerContent":"", # 学生提交内容
                        "labReportAnswerFileList":[{
                                                    "answerFileId":"", # 提交附件id
                                                    "correctedFileId":"", # 批改附件id
                                                    "fileDisplayName":"", # 文件显示名称
                                                    "filePath":"", # 文件路径
                                                    "fileRealName":"", # 文件存储名称
                                                    "fileSize":"", # 文件大小
                                                    "fileType":"", # 文件类型
                                                    "innerUrl":"", # 内网地址
                                                    "outerUrl":"" # 外网地址
                                                    }]
                        "submitTime":"", # 学生提交时间（格式：yyyy-MM-dd HH:mm:ss
                        "teacherCorrectedInfoList":[{
                                                    "teacherId":"", # 批改老师id
                                                    "teacherName":"", # 批改老师名称
                                                    "teacherNo":"", # 批改老师编号
                                                    "teacherRecommend":"", # 是否推荐（true-推荐（优秀），false-未推荐）
                                                    "teacherScore":"" # 老师评分
                                                    }]
                        }
        """
        url = url + f"/teachingApi/v1/labreport/{paramspath}/students"
        r = requests.get(url=url, headers=headers, params=params)
        return r

    @classmethod
    def post_correct_student_report(cls, url: str, headers, params, json,paramspath):
        """
               @Summary:接口-老师修改实验报告基本信息
               @Description:1云课堂老师端-修改实验报告基本信息
               :param url:
               :param headers:
               :param params:validCode:labReportAnswerId=XXX&signKey=123123(md5加密)
               :param json:{
                           "comment":"", # 评语
                           "recommend":"", # 是否推荐（true-推荐（优秀），false-未推荐）
                           "score":"", # 得分
                           "teacherId":"", # 批改老师id
                           "teacherName":"", # 批改老师姓名
                           "teacherNo":"", # 批改老师工号
                           "answerCorrectionFiles":[{ # 批注文件列表信息
                                                    "fileDisplayName":"", # 批注文件显示名称
                                                    "filePath":"", # 批注文件路径
                                                    "filePath":"", # 批注文件存储名称
                                                    "filePath":"", # 批注文件大小
                                                    "filePath":"", # 批注文件类型
                                                    "filePath":"", # 批注内网地址
                                                    "filePath":"", # 学生提交附件id
                                                    "outerUrl":"" # 批注外网地址
                                                    }]
                           }
               :param paramspath:labReportAnswerId:报告提交Id
               :return:
               """
        url = url + f"/teachingApi/v1/labreport/{paramspath}/labreportanswercorrect"
        r = requests.get(url=url, headers=headers, params=params, json=json)
        return r
